#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

// int totalFruit(vector<int> &fruits)
// {
//     unordered_map<int, int> hash;
//     int sum = 0;
//     for (int left = 0, right = 0; right < fruits.size(); right++)
//     {
//         hash[fruits[right]]++;
//         while (hash.size() > 2)
//         {
//             hash[fruits[left]]--;
//             if (hash[fruits[left]] == 0)
//             {
//                 hash.erase(fruits[left]);
//             }
//             left++;
//         }
//         sum = max(sum, right - left + 1);
//     }
//     return sum;
// }
int totalFruit(vector<int> &fruits)
{
    int hash[100001] = {0};
    int ret = 0;
    for (int left = 0, right = 0, kind = 0; right < fruits.size(); right++)
    {
        if (hash[fruits[right]] == 0)
            kind++;
        hash[fruits[right]]++;
        while (kind > 2)
        {
            hash[fruits[left]]--;
            if (hash[fruits[left]] == 0)
                kind--;
            left++;
        }
        ret = max(ret, right - left + 1);
    }
    return ret;
}